home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
et
/
et3_0-a1.lha
/
et3
/
src
/
PRINTERS
/
PrintPreviewer.C
< prev
Wrap
C/C++ Source or Header
|
1992-07-09
|
4KB
|
192 lines
#include "PrintManager.h"
#include "Class.h"
#include "String.h"
#include "Scroller.h"
#include "Expander.h"
#include "Window.h"
#include "WindowPort.h"
#include "WindowSystem.h"
#include "PrintPort.h"
#include "BorderItems.h"
#include "Buttons.h"
#include "Printer.h"
#include "PictPort.h"
#include "Picture.h"
#include "PictureItem.h"
//---- PreviewPageItem ---------------------------------------------------------
class PreviewPageItem : public PictureItem {
public:
MetaDef(PreviewPageItem);
PreviewPageItem() : PictureItem((Picture*)0)
{ }
void SetPicture(Picture *bm, bool redraw= TRUE);
Metric GetMinSize();
void Draw(Rectangle);
};
NewMetaImpl0(PreviewPageItem, PictureItem);
Metric PreviewPageItem::GetMinSize()
{
return (gPrintManager->GetPaperSize()+30)*4/4;
}
void PreviewPageItem::Draw(Rectangle)
{
if (pic) {
GrState st;
GrScale(4.0/4.0, 4.0/4.0);
GrTranslate(15);
Rectangle rr(gPrintManager->GetPaperSize());
DrawShadow(rr, gPoint6, gInkWhite, gInkBlack);
GrSetPenNormal();
GrSetPenInk(ePatGrey50);
GrStrokeRect(gPrintManager->GetViewRect());
GrStrokeRect(gPrintManager->GetPrintRect());
GrSetPenNormal();
GrShowPicture(pic->BBox(), pic);
}
}
//---- PreviewDialog -----------------------------------------------------------
const int cIdStop = cIdFirstUser + 100,
cIdNext = cIdFirstUser + 101;
class PreviewDialog : public Dialog {
public:
bool next, stop;
TextItem *ti;
PictureItem *pi;
public:
PreviewDialog() : Dialog("Print Preview", eWinDefault)
{ }
VObject *DoMakeContent();
void Control(int id, int part, void *val);
void Show();
void SetPicture(Picture *pict);
void SetStatus(char *msg);
};
void PreviewDialog::Show()
{
next= stop= FALSE;
ShowAt(gWindow, gWindow->contentRect.Center());
}
void PreviewDialog::SetStatus(char *msg)
{
if (ti) {
ti->SetString(form("Status: %s", msg), TRUE);
ti->UpdateEvent();
}
}
void PreviewDialog::SetPicture(Picture *pict)
{
next= stop= FALSE;
if (pict) {
pi->SetPicture(pict, TRUE);
ti->UpdateEvent();
}
}
VObject *PreviewDialog::DoMakeContent()
{
pi= new PreviewPageItem;
Scroller *scr= new Scroller(pi, gPrintManager->GetPaperSize()*2/3);
scr->SetBgInk(ePatGrey50);
VObject *v=
new HExpander(gPoint10,
new ActionButton(cIdNext, "Next"),
new ActionButton(cIdStop, "Stop"),
ti= new TextItem("Status: "),
0
);
v->SetFlag(eVObjHFixed|eVObjVFixed);
return new VExpander(gPoint2, v, scr, 0);
}
void ExitLoop()
{
if (WindowSystem::grabport)
WindowSystem::grabport->ExitLoop();
}
void PreviewDialog::Control(int id, int part, void *val)
{
if (id == cIdStop) {
stop= TRUE;
ExitLoop();
} else if (id == cIdNext) {
next= TRUE;
ExitLoop();
} else
Dialog::Control(id, part, val);
}
//---- Preview -----------------------------------------------------------------
class Preview : public Printer {
PreviewDialog *previewDialog;
PictPort *pictPort;
int pagecnt;
public:
MetaDef(Preview);
Preview()
{ }
~Preview()
{ SafeDelete(previewDialog); }
char *GetName()
{ return "Preview"; }
bool CanPrint()
{ return TRUE; }
PrintPort *MakePrintPort(char*)
{ return pictPort= new PictPort(new Picture); }
void Start(int pagecnt);
bool OpenPage(int pageno, Rectangle pgr);
bool ClosePage();
void Finish();
PrinterSettings *GetSettings()
{ return gPrintManager->currSettings; }
};
NewMetaImpl0(Preview, Printer);
void Preview::Start(int pc)
{
pagecnt= pc;
previewDialog= new PreviewDialog;
previewDialog->Show();
}
bool Preview::OpenPage(int pageno, Rectangle)
{
previewDialog->SetStatus(form("Page %d of %d", pageno, pagecnt));
return FALSE;
}
bool Preview::ClosePage()
{
previewDialog->SetPicture(pictPort->GetPicture());
((WindowPort*) previewDialog->GetWindow()->GetPortDesc())->GrabLoop();
return previewDialog->stop;
}
void Preview::Finish()
{
previewDialog->Close();
}